/*!
 * \file md_struct.h
 * \brief Xele行情数据结构定义文件
 * 
 * \details 该文件定义了上海期货交易所(SHFE) Xele行情系统的所有数据结构：
 *          - 定义了Xele行情协议的消息类型常量
 *          - 提供了完整的行情数据类型定义
 *          - 包含普通行情、深度行情、快照数据等结构
 *          - 支持心跳、静态数据、实时推送等多种消息格式
 *          - 使用紧凑的内存布局优化网络传输效率
 *          - 兼容Xele系统的原生数据格式
 * 
 * \note 所有结构体使用1字节对齐以确保网络传输的准确性
 * \warning 修改这些结构体可能导致与Xele系统的兼容性问题
 */
#ifndef SSE_STRUCT_H
#define SSE_STRUCT_H

#include <stdint.h>
#include <iomanip>

/*!
 * \brief Xele消息类型定义
 * 
 * 定义Xele行情系统中使用的各种消息类型常量
 */
#define MESSAGE_MARKET_DATA        0x01		///< 普通行情数据消息
#define MESSAGE_DEPTH              0x02		///< 深度行情数据消息
#define MESSAGE_MARKET_DATA_STATIC 0x03		///< 静态行情数据消息
#define MESSAGE_SNAP_SHOT          0x04		///< 快照数据消息
#define MESSAGE_DEPTH_SNAP_SHOT    0x05		///< 深度快照数据消息
#define MESSAGE_TYPE_HEART_BEAT    0x00		///< 心跳消息
#define XELE_MD_DATA_VERSION       0x01		///< Xele行情数据版本号

/*!
 * \brief Xele行情数据类型定义
 * 
 * 为Xele行情系统定义的各种数据类型，确保数据精度和兼容性
 */
typedef int16_t  TXeleMdInstrumentNo16_Type;		///< 16位合约编号类型
typedef int32_t  TXeleMdSnapNoType;					///< 快照编号类型
typedef int32_t  TXeleMdChangeNoType;				///< 变更编号类型
typedef uint32_t TXeleMdSnapDateTimeType;			///< 快照日期时间类型
typedef int32_t  TXeleMdPriceTypeInt;				///< 整数价格类型
typedef int16_t  TXeleMdVolume16_Type;				///< 16位成交量类型
typedef int32_t  TXeleMdVolume32_Type;				///< 32位成交量类型
typedef int32_t  TXeleMdLastPriceType;				///< 最新价类型
typedef int64_t  TXeleMdTurnoverType;				///< 成交额类型（整数）
typedef double   TXeleMdTurnoverTypeDouble;			///< 成交额类型（浮点）
typedef int64_t  TXeleMdOpenInterestType;			///< 持仓量类型（整数）
typedef double   TXeleMdOpenInterestTypeDouble;		///< 持仓量类型（浮点）
typedef int32_t  TXeleMdPacketNoType;				///< 数据包编号类型
typedef int16_t  TXeleMdTopicIDType;				///< 主题ID类型
typedef uint16_t TXeleMdSnapMillisecType;			///< 快照毫秒类型
typedef uint32_t TXeleMdSnapTimeType;				///< 快照时间类型
typedef int8_t   TXeleMdCenterChangeNoType;			///< 中心变更编号类型
typedef int16_t  TXeleMdLengthType;					///< 长度类型
typedef char     TXeleMdInstrumentIDType[31];		///< 合约代码类型（31字符）
typedef char     TXeleMdUnderlyingInstrIDType[31];	///< 标的合约代码类型（31字符）
typedef char     TXeleMdProductClassType;			///< 产品类别类型
typedef double   TXeleMdStrikePriceType;			///< 行权价类型
typedef char     TXeleMdOptionsTypeType;			///< 期权类型
typedef int32_t  TXeleMdVolumeMultipleType;			///< 合约乘数类型
typedef double   TXeleMdUnderlyingMultipleType;		///< 标的乘数类型
typedef int32_t  TXeleMdIsTradingType;				///< 是否交易类型
typedef char     TXeleMdCurrencyIDType[4];			///< 币种代码类型（4字符）
typedef double   TXeleMdPriceTickType;				///< 价格刻度类型
typedef double   TXeleMdCodecPriceType;				///< 编码价格类型
typedef int32_t  TXeleMdInstrumentNo32_Type;		///< 32位合约编号类型
typedef double   TXeleMdPriceTypeDouble;			///< 浮点价格类型
typedef double   TXeleMdPreOpenInterestType;		///< 昨持仓量类型
typedef double   TXeleMdPreDeltaType;				///< 昨Delta类型
typedef double   TXeleMdCurrDeltType;				///< 当前Delta类型
typedef char     TXeleMdActionDayType[9];			///< 业务日期类型（9字符）
typedef char     TXeleMdUpdateTimeType[9];			///< 更新时间类型（9字符）
typedef int32_t  TXeleMdUpdateMilliSecType;			///< 更新毫秒类型

#pragma pack(push, 1)

/*!
 * \struct CXeleShfeMarketHead
 * \brief Xele SHFE行情消息头结构
 * 
 * 所有Xele行情消息的通用头部，包含版本和消息类型信息
 */
struct CXeleShfeMarketHead {
  int8_t Version;		///< 协议版本号
  int8_t Type;			///< 消息类型（使用MESSAGE_*常量）
};

/*!
 * \struct CXeleShfeMarketData
 * \brief Xele SHFE普通行情数据结构
 * 
 * 包含基本的行情信息：买卖价格、成交量、成交额、持仓量等
 */
struct CXeleShfeMarketData {
  TXeleMdInstrumentNo16_Type InstrumentNo;		///< 合约编号
  TXeleMdSnapDateTimeType    SnapDateTime;		///< 快照时间
  TXeleMdPriceTypeInt        BidPrice;			///< 买价
  TXeleMdVolume32_Type       BidVolume;			///< 买量
  TXeleMdPriceTypeInt        AskPrice;			///< 卖价
  TXeleMdVolume32_Type       AskVolume;			///< 卖量
  TXeleMdLastPriceType       LastPrice;			///< 最新价
  TXeleMdVolume32_Type       Volume;			///< 成交量
  TXeleMdTurnoverType        Turnover;			///< 成交额
  TXeleMdOpenInterestType    OpenInterest;		///< 持仓量
};

/*!
 * \struct CXeleShfeHeartBeat
 * \brief Xele SHFE心跳消息结构
 * 
 * 用于维持连接和同步状态的心跳消息
 */
struct CXeleShfeHeartBeat {
  TXeleMdLengthType         Length;			///< 消息长度
  TXeleMdPacketNoType       PacketNo;		///< 数据包编号
  TXeleMdTopicIDType        TopicID;		///< 主题ID
  TXeleMdSnapMillisecType   SnapMillisec;	///< 快照毫秒
  TXeleMdSnapNoType         SnapNo;			///< 快照编号
  TXeleMdSnapTimeType       SnapTime;		///< 快照时间
  TXeleMdCenterChangeNoType CenterChangeNo;	///< 中心变更编号
};

/*!
 * \struct CXeleShfeDepthMarketData
 * \brief Xele SHFE深度行情数据结构
 * 
 * 包含五档买卖盘口数据的深度行情信息
 */
struct CXeleShfeDepthMarketData {
  TXeleMdInstrumentNo16_Type InstrumentNo;		///< 合约编号
  TXeleMdSnapDateTimeType    SnapDateTime;		///< 快照时间
  TXeleMdPriceTypeInt        BidPrice1;			///< 买一价
  TXeleMdVolume32_Type       BidVolume1;		///< 买一量
  TXeleMdPriceTypeInt        AskPrice1;			///< 卖一价
  TXeleMdVolume32_Type       AskVolume1;		///< 卖一量
  TXeleMdPriceTypeInt        BidPrice2;			///< 买二价
  TXeleMdVolume32_Type       BidVolume2;		///< 买二量
  TXeleMdPriceTypeInt        AskPrice2;			///< 卖二价
  TXeleMdVolume32_Type       AskVolume2;		///< 卖二量
  TXeleMdPriceTypeInt        BidPrice3;			///< 买三价
  TXeleMdVolume32_Type       BidVolume3;		///< 买三量
  TXeleMdPriceTypeInt        AskPrice3;			///< 卖三价
  TXeleMdVolume32_Type       AskVolume3;		///< 卖三量
  TXeleMdPriceTypeInt        BidPrice4;			///< 买四价
  TXeleMdVolume32_Type       BidVolume4;		///< 买四量
  TXeleMdPriceTypeInt        AskPrice4;			///< 卖四价
  TXeleMdVolume32_Type       AskVolume4;		///< 卖四量
  TXeleMdPriceTypeInt        BidPrice5;			///< 买五价
  TXeleMdVolume32_Type       BidVolume5;		///< 买五量
  TXeleMdPriceTypeInt        AskPrice5;			///< 卖五价
  TXeleMdVolume32_Type       AskVolume5;		///< 卖五量
  TXeleMdLastPriceType       LastPrice;			///< 最新价
  TXeleMdVolume32_Type       Volume;			///< 成交量
  TXeleMdTurnoverType        Turnover;			///< 成交额
  TXeleMdOpenInterestType    OpenInterest;		///< 持仓量
};

/*!
 * \struct CXeleShfeMarketDataStatic
 * \brief Xele SHFE静态行情数据结构
 * 
 * 包含合约的静态信息：合约参数、价格限制、昨日数据等
 */
struct CXeleShfeMarketDataStatic {
  TXeleMdLengthType             Length;				///< 消息长度
  TXeleMdInstrumentIDType       InstrumentID;		///< 合约代码
  TXeleMdUnderlyingInstrIDType  UnderlyingInstrID;	///< 标的合约代码
  TXeleMdProductClassType       ProductClass;		///< 产品类别
  TXeleMdStrikePriceType        StrikePrice;		///< 行权价
  TXeleMdOptionsTypeType        OptionsType;		///< 期权类型
  TXeleMdVolumeMultipleType     VolumeMultiple;		///< 合约乘数
  TXeleMdUnderlyingMultipleType UnderlyingMultiple;	///< 标的乘数
  TXeleMdIsTradingType          IsTrading;			///< 是否交易
  TXeleMdCurrencyIDType         CurrencyID;		///< 币种代码
  TXeleMdPriceTickType          PriceTick;			///< 价格刻度
  TXeleMdCodecPriceType         CodecPrice;		///< 编码价格
  TXeleMdInstrumentNo32_Type    InstrumentNo;		///< 合约编号
  TXeleMdPriceTypeDouble        HighestPrice;		///< 最高价
  TXeleMdPriceTypeDouble        LowestPrice;		///< 最低价
  TXeleMdPriceTypeDouble        OpenPrice;			///< 开盘价
  TXeleMdPriceTypeDouble        ClosePrice;			///< 收盘价
  TXeleMdPriceTypeDouble        SettlementPrice;	///< 结算价
  TXeleMdPriceTypeDouble        UpperLimitPrice;	///< 涨停价
  TXeleMdPriceTypeDouble        LowerLimitPrice;	///< 跌停价
  TXeleMdPriceTypeDouble        PreSettlementPrice;	///< 昨结算价
  TXeleMdPriceTypeDouble        PreClosePrice;		///< 昨收盘价
  TXeleMdPreOpenInterestType    PreOpenInterest;	///< 昨持仓量
  TXeleMdPreDeltaType           PreDelta;			///< 昨Delta
  TXeleMdCurrDeltType           CurrDelta;			///< 当前Delta
};

/*!
 * \struct CXeleShfeSnapShot
 * \brief Xele SHFE快照数据结构
 * 
 * 包含完整的市场快照信息：静态数据+当前行情数据
 */
struct CXeleShfeSnapShot {
  TXeleMdLengthType             Length;				///< 消息长度
  TXeleMdInstrumentIDType       InstrumentID;		///< 合约代码
  TXeleMdUnderlyingInstrIDType  UnderlyingInstrID;	///< 标的合约代码
  TXeleMdProductClassType       ProductClass;		///< 产品类别
  TXeleMdStrikePriceType        StrikePrice;		///< 行权价
  TXeleMdOptionsTypeType        OptionsType;		///< 期权类型
  TXeleMdVolumeMultipleType     VolumeMultiple;		///< 合约乘数
  TXeleMdUnderlyingMultipleType UnderlyingMultiple;	///< 标的乘数
  TXeleMdIsTradingType          IsTrading;			///< 是否交易
  TXeleMdCurrencyIDType         CurrencyID;		///< 币种代码
  TXeleMdPriceTickType          PriceTick;			///< 价格刻度
  TXeleMdCodecPriceType         CodecPrice;		///< 编码价格
  TXeleMdInstrumentNo32_Type    InstrumentNo;		///< 合约编号
  TXeleMdSnapNoType             SnapNo;				///< 快照编号
  TXeleMdPacketNoType           PacketNo;			///< 数据包编号
  TXeleMdChangeNoType           ChangeNo;			///< 变更编号
  TXeleMdPriceTypeDouble        HighestPrice;		///< 最高价
  TXeleMdPriceTypeDouble        LowestPrice;		///< 最低价
  TXeleMdPriceTypeDouble        OpenPrice;			///< 开盘价
  TXeleMdPriceTypeDouble        ClosePrice;			///< 收盘价
  TXeleMdPriceTypeDouble        SettlementPrice;	///< 结算价
  TXeleMdPriceTypeDouble        UpperLimitPrice;	///< 涨停价
  TXeleMdPriceTypeDouble        LowerLimitPrice;	///< 跌停价
  TXeleMdPriceTypeDouble        PreSettlementPrice;	///< 昨结算价
  TXeleMdPriceTypeDouble        PreClosePrice;		///< 昨收盘价
  TXeleMdPreOpenInterestType    PreOpenInterest;	///< 昨持仓量
  TXeleMdPreDeltaType           PreDelta;			///< 昨Delta
  TXeleMdCurrDeltType           CurrDelta;			///< 当前Delta
  TXeleMdActionDayType          ActionDay;			///< 业务日期
  TXeleMdUpdateTimeType         UpdateTime;		///< 更新时间
  TXeleMdUpdateMilliSecType     UpdateMilliSec;	///< 更新毫秒
  TXeleMdPriceTypeDouble        BidPrice;			///< 买价
  TXeleMdVolume32_Type          BidVolume;			///< 买量
  TXeleMdPriceTypeDouble        AskPrice;			///< 卖价
  TXeleMdVolume32_Type          AskVolume;			///< 卖量
  TXeleMdPriceTypeDouble        LastPrice;			///< 最新价
  TXeleMdVolume32_Type          Volume;				///< 成交量
  TXeleMdTurnoverTypeDouble     Turnover;			///< 成交额
  TXeleMdOpenInterestTypeDouble OpenInterest;		///< 持仓量
};

/*!
 * \struct CXeleShfeDepthSnapShot
 * \brief Xele SHFE深度快照数据结构
 * 
 * 包含完整的深度市场快照信息：静态数据+五档行情数据
 */
struct CXeleShfeDepthSnapShot {
  TXeleMdLengthType             Length;				///< 消息长度
  TXeleMdInstrumentIDType       InstrumentID;		///< 合约代码
  TXeleMdUnderlyingInstrIDType  UnderlyingInstrID;	///< 标的合约代码
  TXeleMdProductClassType       ProductClass;		///< 产品类别
  TXeleMdStrikePriceType        StrikePrice;		///< 行权价
  TXeleMdOptionsTypeType        OptionsType;		///< 期权类型
  TXeleMdVolumeMultipleType     VolumeMultiple;		///< 合约乘数
  TXeleMdUnderlyingMultipleType UnderlyingMultiple;	///< 标的乘数
  TXeleMdIsTradingType          IsTrading;			///< 是否交易
  TXeleMdCurrencyIDType         CurrencyID;		///< 币种代码
  TXeleMdPriceTickType          PriceTick;			///< 价格刻度
  TXeleMdCodecPriceType         CodecPrice;		///< 编码价格
  TXeleMdInstrumentNo32_Type    InstrumentNo;		///< 合约编号
  TXeleMdSnapNoType             SnapNo;				///< 快照编号
  TXeleMdPacketNoType           PacketNo;			///< 数据包编号
  TXeleMdChangeNoType           ChangeNo;			///< 变更编号
  TXeleMdPriceTypeDouble        HighestPrice;		///< 最高价
  TXeleMdPriceTypeDouble        LowestPrice;		///< 最低价
  TXeleMdPriceTypeDouble        ClosePrice;			///< 收盘价
  TXeleMdPriceTypeDouble        SettlementPrice;	///< 结算价
  TXeleMdPriceTypeDouble        UpperLimitPrice;	///< 涨停价
  TXeleMdPriceTypeDouble        LowerLimitPrice;	///< 跌停价
  TXeleMdPriceTypeDouble        PreSettlementPrice;	///< 昨结算价
  TXeleMdPriceTypeDouble        PreClosePrice;		///< 昨收盘价
  TXeleMdPreOpenInterestType    PreOpenInterest;	///< 昨持仓量
  TXeleMdPreDeltaType           PreDelta;			///< 昨Delta
  TXeleMdCurrDeltType           CurrDelta;			///< 当前Delta
  TXeleMdActionDayType          ActionDay;			///< 业务日期
  TXeleMdUpdateTimeType         UpdateTime;		///< 更新时间
  TXeleMdUpdateMilliSecType     UpdateMilliSec;	///< 更新毫秒
  TXeleMdPriceTypeDouble        BidPrice1;			///< 买一价
  TXeleMdVolume32_Type          BidVolume1;			///< 买一量
  TXeleMdPriceTypeDouble        AskPrice1;			///< 卖一价
  TXeleMdVolume32_Type          AskVolume1;			///< 卖一量
  TXeleMdPriceTypeDouble        BidPrice2;			///< 买二价
  TXeleMdVolume32_Type          BidVolume2;			///< 买二量
  TXeleMdPriceTypeDouble        AskPrice2;			///< 卖二价
  TXeleMdVolume32_Type          AskVolume2;			///< 卖二量
  TXeleMdPriceTypeDouble        BidPrice3;			///< 买三价
  TXeleMdVolume32_Type          BidVolume3;			///< 买三量
  TXeleMdPriceTypeDouble        AskPrice3;			///< 卖三价
  TXeleMdVolume32_Type          AskVolume3;			///< 卖三量
  TXeleMdPriceTypeDouble        BidPrice4;			///< 买四价
  TXeleMdVolume32_Type          BidVolume4;			///< 买四量
  TXeleMdPriceTypeDouble        AskPrice4;			///< 卖四价
  TXeleMdVolume32_Type          AskVolume4;			///< 卖四量
  TXeleMdPriceTypeDouble        BidPrice5;			///< 买五价
  TXeleMdVolume32_Type          BidVolume5;			///< 买五量
  TXeleMdPriceTypeDouble        AskPrice5;			///< 卖五价
  TXeleMdVolume32_Type          AskVolume5;			///< 卖五量
  TXeleMdPriceTypeDouble        LastPrice;			///< 最新价
  TXeleMdVolume32_Type          Volume;				///< 成交量
  TXeleMdTurnoverTypeDouble     Turnover;			///< 成交额
  TXeleMdOpenInterestTypeDouble OpenInterest;		///< 持仓量
};

#pragma pack(pop)

//end of struct

#endif
